CEDEC2015 Day3 メモとか
概要
メモ
物理ベース時代のライトマップベイク奮闘記
シリコンスタジオの方。
ライトマップの効果
最終出力時まで一貫して効果的。
ワークフローの構築
3ds Max + V-Ray
メンタルレイのノイズが気に入らなかったり時間かかったりなのでV-Ray
これ資料アップされるの待ち遠しいな
生成時のいろんなツールのつぎはぎパイプラインすごくつらそう
正しいライトマップ
V-Rayは物理ベースレンダリング
ライトマップに書き込まれるべき値
GrobalIllumination
間接光による値
=
間接光による照度
あとDirectionalLightの成分とか見てみて云々
クオリティ
ノイズの低減
ライトマップが適応されているものといないものを明確に分けられている
たとえばロボとかのディフューズはライトマップのデータから引っ張られている(?)
質問してみた
どんな言語とかでツールチェーン組めたら幸せな感じがありますか?
->なんでも。一貫して安定してれば。
なるほど
IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…
崖っぷちバスターズでの事例
技術採用プロセスとか。
IoTとは
はい
ネットワークゲームのはなし
2010年代のネットワークゲーム
高速なインタネット
MO/MMO
eSports
スマフォ
常時接続前提のゲームあるよね
環境
3/4G
最低で2MB/sとか
崖っぷちバスターズ事例
シングルプレイ
マルチプレイ
シングルプレイだとWebAPI
マルチプレイ
バトル部分はリアルタイム、4人
Bisqueっていう開発基盤をつかっている
Cocos2Dとかをベースにクロスプラットフォームな
前提としての会社の強み、弱み
Web APIは得意
クラウド利用実績とか
リアルタイムサーバ、クライアントとかの構築はやったことない
目指したこと
・実装スピード重視
・1Room 4player ターン制
・レイテンシ最大1秒
プロトタイプの結果、
クライアントにHostをたて、サーバはメッセージのpub/subに徹するタイプになったぽい
比較検討したもの
polling
WS
Socket.io
MQTT
Platform機能(iOSのやつとか
商用エンジン
インフラ、クライアント、ゲーム性の観点からMQTTを選択
(ここでの)MQTTとは
pub/sub
低速、不安定なネットワークでも動く
軽量
QoSあったり
MQTTの解説
はい
実装について
全体像
MQTTBrokerServerをBattleInstanceServerとして利用
Topic -> Room
Room管理はAPIServer制御
マルチプレイバトル
WebAPIでマッチング
マッチング情報をBrokerServer(BattleInstanceServer)へと転送
Clientの一人がHostになり、SessionMasterとして同期移譲管理
broker
room
c1 c2 c3
(Host)
送信するデータはクライアント側で暗号化してる。
(これクライアント側正当性みたいなのクライアント自発的なやつなので、チートしやすそうだな~~~
暗号化してようが暗号化ロジックはクライアントの中にあってクライアント開ければ暗号化手段はそのまま利用できるんで、
この部分の意味はネットワークとかプロキシとかでの中間変更不可という要素に収まるんじゃなかろうか。
んでクライアントから出たデータをそのままpub/subしちゃうので、
データの正当性判断要因や拒否機構がどこにも無く、かつクライアント群という全員クライアント状態なので、運営がチートに気づけるチャンスがなさそうな気がする、、
もうちょい詳しく書くと、全員クライアントで神視点的なバリデータとか状態変化監視者が不在なので、
誰がどんなデータを出しても、受け取る側はとりあえず正しいと思うしか無くて受け取っちゃう、みたいなところがある。
なんだけどこのゲームの場合必殺技のコスト無視とかそのへんで出そうなくらいで
チートされた場合のダメージと比較して看過してるのかな
守りたいのが公平さなのか自作のシステム堅牢性なのかみたいな話で、
ぶっちゃけひどい目にあうユーザが居ない(PVP要素がない、協力プレイで味方が強い分には問題ない)のであれば、
暗号化でシステム堅牢性に目を向けるだけっていうのはメッチャ健全で良いなあと思った。
)
余談
PhotonがClient-ClientRPCとかをサポートしてて使うのすごく楽なんだけど、あれ使ってクライアント群内にHost作るとかそういう感じに進むと
PvPとかがあるゲームルールによってはチート情報を全クライアントで無条件にSyncしちゃってそれを誰もValidateできずに
最高にキッツイ状態になるので、何事もまずは選択肢増やして使う際に気をつけるべきだなあという感想。
簡単にそういうのできるソリューションを選べると良いな。
Hostが落ちた場合は別のClientに移譲する
これ地味にめっちゃ大変なはず、誰がNext Hostなのかを判断する要素がサーバ側に無いと楽にならないような、、
WebAPI側で解決してたりするのかな。もしかしたらそうおっしゃっていたかもしれない。
質問で聞いてみたかった。
BrokerServerの実装は?
一台あたりの性能、コストを最大化したい
高負荷時の安定性 あたりを基準に見ている
MosquittoとRabbitMQ with MQTT Plugin が候補に残った
Mosquitto
シングルスレッド、クラスタリングする場合は自作
RabbitMQ
マルチスレッド、クラスタリングあり <- RabbitMQを選択。
構成案
Broker Standalone parallel
結局パフォーマンス劣化、接続時間のトレードオフなどからクラスタリングせず。
AWSでのオートスケーリングが効く環境を構築して云々
アプリケーション編
クライアントライブラリの実装の話
選定
フルスクラッチ or paho or Mosquitto
ライブラリで使えればいいよねって感じでMosquitto(libmosquitto)を選択。
BSDソケット使ってるんだけどiOS/Androidでいろいろ問題が。
→Mosquittoのコードには手を加えないでいいように工夫(Define置き換えとか)
トピック一覧
Common
ブロードキャスト
System
ブロードキャスト
Host
相互死活判定
ゲストが投げるとHostに集約される
Private/ゲストID
ホストがゲストに対して送付
お互いに送れば擬似P2P
QoS
アニメーション情報とかはQoS0
衝突、必殺技などの必須情報はQoS1
最悪でもQoS1のもののみが届けばゲームが成立するのを想定して振り分けている。
QoS1で送っているものについてはさらに再送をする機構をつけた(?)
これどこでコントロールしてるんだろう。サマーレッスンの時間迫ってたので部屋でちゃった。
データ構造
msgpack
今後はpahoに乗せ換える予定
あとElixirとか試し中
サマーレッスン
整理券失くすとか凄まじいダメさを発揮しつついろいろあって復帰して観れた。 感謝しかない。。
箇条書きで
・人と対面する、っていうシーンなんだけど、これ火力あげるには他人の中の自分、みたいなのの表現が必要で、「これスペックとか表現で突破できるものなのかなあ、、超優秀な表現AI、そのグラフィック表現が必要な世界でメッチャ遠そう」みたいな感想。
・臨場感を感じさせるための工夫みたいなのはなんかしっくりこなかった。
・画質はCBのほうがよかったな~と思いつつ。
・ユーザーが何かをしたい、っていうのを引き出す系統ばっかり触ってきたので、そういうタイプじゃないコンテンツだなと思った。PS3の「アフリカ」とかをちょっと思い出す。
自分は「綺麗」っていうパラメータが何かを触る時のモチベーションとして長時間もたないタイプなので、なんか綺麗なだけだとつまらないんだなと思った。
このへんは女子高生のお部屋モードだったら俺の感想は違ったんだろうか。あんま違わない気がする。
VR、「許されるツッコミやすい隙」みたいなのがあれば、想像力の余地の世界、みたいなのがまた発生しそうな予感がある。